package section3_4;

/**
 * Created by Hyman on 2017/6/4.
 *
 * 等待多个并发事件的完成
 *
 * 当创建CountDownLatch对象时，使用构造器来初始化内部计数器。
 * 当countDown()方法被调用后，计数器将减1。当计数器到达0的时候，CountDownLatch对象将唤起所有在await()方法上等待的线程
 *
 * 和其他同步方法相比，CountDownLatch机制有下述不同：
 *   CountDownLatch机制不是用来保护共享资源或者临界区的，它是用来同步执行多个任务的一个或者多个线程；
 *   CountDownLatch准许进入一次。如同刚刚解释的，一旦CountDownLatch的内部计数器到达0,再调用这个方法将不起作用。
 *      如果要做类似的同步，就必须创建一个新的 CountDownLatch 对象。
 */
public class Main {

    public static void main(String[] args) {

        // 创建一个视频会议对象，它有10个参与者
        VideoConference conference = new VideoConference(10);

        // 创建一个线程去运行视频会议
        Thread threadConference = new Thread(conference);
        threadConference.start();

        // 创建十个参与者，每个参与者在一个单独的线程中运行
        for(int i=0; i<10; i++) {
            Participant p = new Participant(conference, "Participant " + i);
            Thread t = new Thread(p);
            t.start();
        }
    }

}
